#include<iostream>
#include<unistd.h>
#include<signal.h>

using namespace std;

//打印位图
void showBlock(sigset_t *oset)
{
    int signo = 1;
    for(; signo <=31; signo++)
    {
        if(sigismember(oset, signo)) cout << "1";
        else cout << "0";
    }
    cout << endl;
}

int main()
{
    //只是在用户层面上设置
    sigset_t set,oset;
    sigemptyset(&set);
    sigemptyset(&oset);
    //对2号信号设置阻塞
    sigaddset(&set,2);//SIG_INT

    //将阻塞设置到进程的block中
    sigprocmask(SIG_SETMASK,&set,&oset);
    //计数器
    int cnt=0;

    while(true)
    {
        //当计数器到达5时，我们再阻塞2号信号，然后获取更改以后的block表
        if(cnt++==5)
        {
            sigprocmask(SIG_SETMASK,&set,&oset);
        }
        //打印原先的block表
        showBlock(&oset);
        sleep(1);
    }


    // //野指针
    // sleep(2);
    // cout<<"野指针问题..."<<endl;
    // cout<<"野指针问题..."<<endl;
    // cout<<"野指针问题..."<<endl;
    // int *a=nullptr;
    // *a=100;
    // cout<<"野指针问题..."<<endl;
    // cout<<"野指针问题..."<<endl;
    // cout<<"野指针问题..."<<endl;

    // while(true)
    // {
    //     cout<<"我是一个进程,我的pid:"<<getpid()<<endl;
    //     sleep(1);
    // }


    // //除0
    // // int a=10;
    // // a/=0;


    return 0;
}